--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
meshchatx/src/backend/message_handler.py 147e9451330dfa57b06aa877aa88941b226588af (147e9451) Text, 2.93 KB
Tff7b72from T7ee787.T7ee787database Tff7b72import Te6edf3Database
Tff7b72class T56d364MessageHandlerTb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dbTb4b4b4: Te6edf3DatabaseTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdb Tff7b72= Te6edf3db
Tff7b72def Td2a8ffget_conversation_messagesTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3local_hashTb4b4b4,
Te6edf3destination_hashTb4b4b4,
Te6edf3limitTff7b72=T79c0ff100Tb4b4b4,
Te6edf3offsetTff7b72=T79c0ff0Tb4b4b4,
Te6edf3after_idTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3before_idTff7b72=Tff7b72NoneTb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"""
Ta5d6ff SELECT * FROM lxmf_messages
Ta5d6ff WHERE ((source_hash = ? AND destination_hash = ?)
Ta5d6ff OR (destination_hash = ? AND source_hash = ?))
Ta5d6ff Ta5d6ff"""
Te6edf3params Tff7b72= Tb4b4b4[Te6edf3local_hashTb4b4b4, Te6edf3destination_hashTb4b4b4, Te6edf3local_hashTb4b4b4, Te6edf3destination_hashTb4b4b4]
Tff7b72if Te6edf3after_idTb4b4b4:
Te6edf3query Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff AND id > ?Ta5d6ff"
Te6edf3paramsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3after_idTb4b4b4)
Tff7b72if Te6edf3before_idTb4b4b4:
Te6edf3query Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff AND id < ?Ta5d6ff"
Te6edf3paramsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3before_idTb4b4b4)
Te6edf3query Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff ORDER BY id DESC LIMIT ? OFFSET ?Ta5d6ff"
Te6edf3paramsTff7b72.Td2a8ffextendTb4b4b4(Tb4b4b4[Te6edf3limitTb4b4b4, Te6edf3offsetTb4b4b4]Tb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffproviderTff7b72.Td2a8fffetchallTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3paramsTb4b4b4)
Tff7b72def Td2a8ffdelete_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3local_hashTb4b4b4, Te6edf3destination_hashTb4b4b4)Tb4b4b4:
Te6edf3query Tff7b72= Ta5d6ff"""
Ta5d6ff DELETE FROM lxmf_messages
Ta5d6ff WHERE ((source_hash = ? AND destination_hash = ?)
Ta5d6ff OR (destination_hash = ? AND source_hash = ?))
Ta5d6ff Ta5d6ff"""
Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffproviderTff7b72.Td2a8ffexecuteTb4b4b4(
Te6edf3queryTb4b4b4,
Tb4b4b4[Te6edf3local_hashTb4b4b4, Te6edf3destination_hashTb4b4b4, Te6edf3local_hashTb4b4b4, Te6edf3destination_hashTb4b4b4]Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ffsearch_messagesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3local_hashTb4b4b4, Te6edf3search_termTb4b4b4)Tb4b4b4:
Te6edf3like_term Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ff%Tffd700{Te6edf3search_termTffd700}Ta5d6ff%Ta5d6ff"
Te6edf3query Tff7b72= Ta5d6ff"""
Ta5d6ff SELECT source_hash, destination_hash, MAX(timestamp) as max_ts
Ta5d6ff FROM lxmf_messages
Ta5d6ff WHERE (source_hash = ? OR destination_hash = ?)
Ta5d6ff AND (title LIKE ? OR content LIKE ? OR source_hash LIKE ? OR destination_hash LIKE ?)
Ta5d6ff GROUP BY source_hash, destination_hash
Ta5d6ff Ta5d6ff"""
Te6edf3params Tff7b72= Tb4b4b4[Te6edf3local_hashTb4b4b4, Te6edf3local_hashTb4b4b4, Te6edf3like_termTb4b4b4, Te6edf3like_termTb4b4b4, Te6edf3like_termTb4b4b4, Te6edf3like_termTb4b4b4]
Tff7b72return Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffproviderTff7b72.Td2a8fffetchallTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3paramsTb4b4b4)
Tff7b72def Td2a8ffget_conversationsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3local_hashTb4b4b4)Tb4b4b4:
T8b949e# Implementation moved from get_conversations DAO but with local_hash filter
Te6edf3query Tff7b72= Ta5d6ff"""
Ta5d6ff SELECT m1.* FROM lxmf_messages m1
Ta5d6ff JOIN (
Ta5d6ff SELECT
Ta5d6ff CASE WHEN source_hash = ? THEN destination_hash ELSE source_hash END as peer_hash,
Ta5d6ff MAX(timestamp) as max_ts
Ta5d6ff FROM lxmf_messages
Ta5d6ff WHERE source_hash = ? OR destination_hash = ?
Ta5d6ff GROUP BY peer_hash
Ta5d6ff ) m2 ON (CASE WHEN m1.source_hash = ? THEN m1.destination_hash ELSE m1.source_hash END = m2.peer_hash
Ta5d6ff AND m1.timestamp = m2.max_ts)
Ta5d6ff WHERE m1.source_hash = ? OR m1.destination_hash = ?
Ta5d6ff ORDER BY m1.timestamp DESC
Ta5d6ff Ta5d6ff"""
Te6edf3params Tff7b72= Tb4b4b4[
Te6edf3local_hashTb4b4b4,
Te6edf3local_hashTb4b4b4,
Te6edf3local_hashTb4b4b4,
Te6edf3local_hashTb4b4b4,
Te6edf3local_hashTb4b4b4,
Te6edf3local_hashTb4b4b4,
Tb4b4b4]
Tff7b72return Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffproviderTff7b72.Td2a8fffetchallTb4b4b4(Te6edf3queryTb4b4b4, Te6edf3paramsTb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────